﻿using System;
using SiGeCoPre.Presupuesto_BL;
using SiGeCoPre.Presupuesto_DTO;
using SiGeCoPre.Presupuesto_Factory;
using SiGeCoPre.Presupuesto_ViewGeneral;

namespace SiGeCoPre.Presupuesto_Util
{
    /// <summary>
    /// Clase para exportar presupuestos de repuestos
    /// </summary>
    class ExportarRepuesto
    {
        static BLClientes createCliente = BLFactoryPresupuesto.createCliente();

        /// <summary>
        /// Exporta el presupuesto
        /// </summary>
        /// <param name="pr">Objeto con los datos del presupuesto y los repuestos</param>
        /// <param name="pc">Objeto con los datos del presupuesto y el cliente</param>
        /// <param name="p">Objeto con datos del presupuesto</param>
        /// <param name="rutaNueva">Determina la ruta donde va a ir el archivo exportado</param>
        public static void exportar(presupuestoRepuestoDTO pr, presupuestosClientesDTO pc, presupuestosDTO p, string rutaNueva)
        {
            string ruta = System.Windows.Forms.Application.StartupPath + @"\Plantillas Framahi\";

            if (!p.EsProforma)
            {
                ruta += "Repuestos.docx";
                frmProgressBar progreso = new frmProgressBar();
                progreso.cargarDetalle("Exportando Presupuesto como Archivo WORD");
                progreso.Show();
                progreso.arrancarProgreso();
                Herramientas.cerrarProceso("WINWORD.EXE");
                exportarRepuesto(ruta, pr, pc, p, rutaNueva);
                progreso.pararProgreso();
                progreso.cargarDetalle("Exportando Presupuesto como Archivo PDF");
                progreso.arrancarProgreso();
                ExportarAPDF.SaveAsPDF(rutaNueva, p.Codigo);
                progreso.pararProgreso();
                progreso.Close();
                progreso.Dispose();
            }
            else
            {
                ruta += "Repuestos - PROFORMA.docx";
                frmProgressBar progreso = new frmProgressBar();
                progreso.cargarDetalle("Exportando Presupuesto como Archivo WORD");
                progreso.Show();
                progreso.arrancarProgreso();
                Herramientas.cerrarProceso("WINWORD.EXE");
                exportarRepuestoPROFORMA(ruta, pr, pc, p, rutaNueva);
                progreso.pararProgreso();
                progreso.cargarDetalle("Exportando Presupuesto como Archivo PDF");
                progreso.arrancarProgreso();
                ExportarAPDF.SaveAsPDF(rutaNueva, p.Codigo);
                progreso.pararProgreso();
                progreso.Close();
                progreso.Dispose();
            }
        }

        /// <summary>
        /// Crea el archivo usando la plantilla normal
        /// </summary>
        /// <param name="ruta">Determina la ruta donde esta la plantilla</param>
        /// <param name="pr">Objeto con los datos del presupuesto y los repuestos</param>
        /// <param name="pc">Objeto con los datos del presupuesto y el cliente</param>
        /// <param name="p">Objeto con los datos del presupuesto</param>
        /// <param name="rutaNueva">Determina la ruta donde va a ir el archivo exportado</param>
        private static void exportarRepuesto(string ruta, presupuestoRepuestoDTO pr, presupuestosClientesDTO pc, presupuestosDTO p, string rutaNueva)
        {
            try
            {
                clientesDTO c = createCliente.getCliente(pc.NombreCliente);

                ExportarAWord exportar = new ExportarAWord(ruta, rutaNueva);
                exportar.FindAndReplace("<FECHA>", p.Fecha);
                exportar.FindAndReplace("<CLIENTE>", pc.NombreCliente);
                exportar.FindAndReplace("<DIRECCION>", c.Direccion);
                exportar.FindAndReplace("<CONTACTO>", c.Contacto);
                exportar.FindAndReplace("<MAIL>", c.Mail);

                exportar.crearTablaRepuestos(pr);

                exportar.FindAndReplace("<PRECIO>", p.Precio);
                exportar.ReemplazarMarcador("FORMA_DE_PAGO", p.FormaPago);
                exportar.ReemplazarMarcador("PLAZO_DE_ENTREGA", p.PlazoEntrega);
                exportar.ReemplazarMarcador("EJECUCION_DE_LA_TAREA", p.EjecucionTrabajo);
                exportar.ReemplazarMarcador("CONSIDERACIONES_GENERALES", p.CondicionesGenerales);

                exportar.SaveDocument();
                exportar.CloseDocument();
            }
            catch (Exception ex)
            {
                Texto.escribirLog(ex.Message);
            }

        }

        /// <summary>
        /// Crea el archivo usando la plantilla de proforma
        /// </summary>
        /// <param name="ruta">Determina la ruta donde esta la plantilla</param>
        /// <param name="pr">Objeto con los datos del presupuesto y los repuestos</param>
        /// <param name="pc">Objeto con los datos del presupuesto y el cliente</param>
        /// <param name="p">Objeto con los datos del presupuesto</param>
        /// <param name="rutaNueva">Determina la ruta donde va a ir el archivo exportado</param>
        private static void exportarRepuestoPROFORMA(string ruta, presupuestoRepuestoDTO pr, presupuestosClientesDTO pc, presupuestosDTO p, string rutaNueva)
        {
            try
            {
                clientesDTO c = createCliente.getCliente(pc.NombreCliente);

                ExportarAWord exportar = new ExportarAWord(ruta, rutaNueva);
                exportar.FindAndReplace("<FECHA>", p.Fecha);
                exportar.FindAndReplace("<CLIENTE>", pc.NombreCliente);
                exportar.FindAndReplace("<DIRECCION>", c.Direccion);
                exportar.FindAndReplace("<CONTACTO>", c.Contacto);
                exportar.FindAndReplace("<MAIL>", c.Mail);

                exportar.FindAndReplace("<CODIGO FACTURA>", p.CodFactura);

                exportar.crearTablaRepuestos(pr);

                exportar.FindAndReplace("<FOB>", p.Fob);
                exportar.FindAndReplace("<CIF>", p.Cif);
                exportar.FindAndReplace("<FORMA DE PAGO>", p.FormaPago);
                exportar.FindAndReplace("<PLAZO DE ENTREGA>", p.PlazoEntrega);
                exportar.FindAndReplace("<EJECUCION DE LA TAREA>", p.EjecucionTrabajo);
                exportar.FindAndReplace("<CONSIDERACIONES_GENERALES>", p.CondicionesGenerales);

                exportar.SaveDocument();
                exportar.CloseDocument();
            }
            catch (Exception ex)
            {
                Texto.escribirLog(ex.Message);
            }

        }
    }
}
